/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 徐海涛
 * Date: 2021-11-23
 * Time: 22:27
 */

public class TestDemo2 {
    public static void main(String[] args) {
        new Person4().eat();//匿名对象，一次性的
    }
    public static void main2(String[] args) {
        Person4 person4 = new Person4();//静态代码块只会被执行一次！
        System.out.println("==================");
       // Person4 person41 = new Person4();
    }
    public static void main1(String[] args) {
        Person4 person4 = new Person4();
        System.out.println("===============");
        Person4 person41 = new Person4("xht");
        System.out.println("===============");
        Person4 person42 = new Person4("bit", 20);//直接在后面输出
    }
}
class Person4 {
    public String name;
    public int age;
    public void eat() {
        System.out.println(name + "正在吃");
    }
    public Person4(String name ,int age) {
        this.name =name;//写上更好不写也行，写上！
        this.age =age;
        System.out.println("Person4带有两个类型参数的构造方法");
    }
    {
        System.out.println("实例代码块"); //如何调用代码块？
    }
    static {
        System.out.println("静态代码块");
    }
    public Person4(String name) {
        this.name = name;//this不能代表当前对象，只能代表当前对象的引用！
        System.out.println("Person4(String)：带一个String类型参数的构造方法");
    }
    public Person4() { //构造了一个方法，方法名和类名是相同的
         //这里不能改成privat，因为封装后只能在类里面使用！
        this("xht" ,18);//调用带有一个参数的构造方法
         System.out.println("Person():不带参数的构造方法");
    }
}
/** //构造方法:
 //方法名和类名是相同的，且构造方法比较特殊，没有返回值。
 //构造方法是干嘛的？--一个对象的产生（对象的实例化）
 //1.为对象分配内存
 //2.调用合适的构造方法。合适？意味着构造方法不止一个！
 *注意
 * 1.如果没有实现任何的构造方法，编译器会帮我们默认生成一个不带参数的构造方法
 * 也就是说一个类，至少会有一个构造方法，就算你没有写！
 *2.如果当前类有其他的构造方法，那么编译器就不会帮我们生成不带参数的构造方法！
 *3.构造方法之间可以构成重载！
 *
 *
 */
/**  this : this和super 有什么区别？
 * this3种用法
 * 1.this.data调用当前对象的属性
 * 2.this.func()调用当前对象的方法
 * 3.this()调用当前对象的其他构造方法
 * 注意只能存放在构造函数当中！！！！
 *

 * 匿名对象！
 * 没有名字的对象
 * 只能用一次
 */
